################################################################# 
## Description: Ce mod ajoute des niveaux visible dans le profil et dans ## les messages. 
## Niveau : le niveau est bas sur l'activit du membre! 
## HP: represente l'activit du membre. 
## MP: represente comment le membre a repondu aux messages. 
## Exp: represente le pourcentage de messages post par un membre. 
## 
## Degr d'installation : facile 
## Templs d'installation : 5 Minutes 
## Fichiers  editer : 4 
## ./includes/usercp_viewprofile.php 
## ./viewtopic.php 
## ./templates/subSilver/viewtopic_body.php 
## ./templates/subSilver/profile_view_body.php 
## 
## Fichiers  inclure : 
## levelmod/exp_bar_fil.gif 
## levelmod/exp_bar_filexp_bar_fil_end.gif 
## levelmod/exp_bar_filexp_bar_left.gif 
## levelmod/exp_bar_filhp_bar_fil.gif 
## levelmod/exp_bar_filhp_bar_fil_end.gif 
## levelmod/exp_bar_filhp_bar_left.gif 
## levelmod/exp_bar_fillevel_bar_emp.gif 
## levelmod/exp_bar_fillevel_bar_right.gif 
## levelmod/exp_bar_filmp_bar_fil.gif 
## levelmod/exp_bar_filmp_bar_fil_end.gif 
## levelmod/exp_bar_filmp_bar_left.gif 
#################################### 
# 
#-----[ OUVRIR ]------------------------------------------ 
# 

./includes/usercp_viewprofile.php 

# 
#-----[ TROUVER ]------------------------------------------ 
# 

$search = '<a href="' . $temp_url . '">' . $lang['Search_user_posts'] . '</a>'; 

# 
#-----[ AJOUTER APRES ]------------------------------------------ 
# 
/* BEGIN LEVEL HACK 
* Note: all new variables are prefixed with level_ to 
* be sure of not overwriting other variables. 
*/ 

/* Determine Level 
* 
* A users level is determined by their total number of posts. 
* We use a nice mathmatical formula to translate a post count 
* into a level. 
* Note, a user with zero posts is level 0 
* 
*/ 

if($profiledata['user_posts'] < 1) 
{ 
   $level_level = 0; 
} 
else 
{ 
   $level_level = floor( pow( log10( $profiledata['user_posts'] ), 3 ) ) + 1; 
} 

/* Determine HP 
* 
* HP is based on user activity. 
* Max HP is based on the users level, and will be the same for 
* all users of the same level. 
* 
* Current HP is based on the users posts per day. 
* The higher the users posts per day (ppd), the more hp 
* they will have. A user with average ppd (as set below) 
* will have 50% of their hp. As a user goes over the average 
* ppd, they will have more hp, but the gains will lessen 
* as the users ppd goes up. This makes it difficult, but not 
* impossible to have 100% hp. 
* 
* For users with under the average ppd, they will have 
* hp equal to 1/2 the percentage their ppd is of average. 
* ie- a user with 2.5 ppd, and an average ppd of 5 
* will have 25% hp. 
* 
* Users who miraculously manage to get higher than 100% 
* of their max health. (by posting far more than average) 
* will get a bonus to their max hp. 
* 
* Note that a user with a level of zero, has 0 / 0 hp. 
* 
*/ 

/* 
* This value determines what the 'average' posts per day is 
* Users above this value will have more hp, and users below 
* will have less. A user with exactly this posts per day 
* will have 50% of his max hp. 
* 
* This variable should NOT be zero. 
* You may set this to a decimal amount (eg 5.1, 2.35) 
*/ 
   $level_avg_ppd = 5; 

/* 
* this value sets how hard it is to achieve 100% 
* hp. The higher you set it, the harder it is to 
* get full hp. 
* 
* to judge how high to set it, a user must have 
* posts per day equal to the $level_avg_ppd plus 
* the number set below. 
* 
* This should NOT be zero. 
*/ 
   $level_bonus_redux = 5; 


if($level_level < 1) 
{ 
   $level_hp = "0 / 0"; 
   $level_hp_percent = 0; 
} 
else 
{ 
   $level_max_hp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (1.5) ); 
    
   if($posts_per_day >= $level_avg_ppd) 
   { 
      $level_hp_percent = floor( (.5 + (($posts_per_day - $level_avg_ppd) / ($level_bonus_redux * 2)) ) * 100); 
   } 
   else 
   { 
      $level_hp_percent = floor( $posts_per_day / ($level_avg_ppd / 50) ); 
   } 
    
   if($level_hp_percent > 100) 
   { 
      //Give the User bonus max HP if they have more than 100% hp 
      $level_max_hp += floor( ($level_hp_percent - 100) * pi() ); 
      $level_hp_percent = 100; 
   } 
   else 
   { 
      $level_hp_percent = max(0, $level_hp_percent); 
   } 
    
   $level_cur_hp = floor($level_max_hp * ($level_hp_percent / 100) ); 
    
   //Be sure that a user has no more than max 
   //and no less than zero hp. 
   $level_cur_hp = max(0, $level_cur_hp); 
   $level_cur_hp = min($level_max_hp, $level_cur_hp); 
    
   $level_hp = $level_cur_hp . " / " . $level_max_hp; 
} 


/* Determine MP 
* 
* MP is calculated by how long the user has been around 
* and how often they post. 
* 
* Max MP is based on level, and increases with level 
* Each post a user makes costs them mp, 
* and a user regenerates mp proportional to how 
* many days they have been registered 
* 
*/ 

//Number of days the user has been at the forums. 
$level_user_days = max(1, round( ( time() - $profiledata['user_regdate'] ) / 86400 )); 

//The mp cost for one post. 
//Raising this value will generally decrease the current 
// mp for most posters. 
//This may be set to a decimal value (eg, 2, 2.1, 3.141596) 
//This should NOT be set to 0 
$level_post_mp_cost = 1; 

//This determines how much mp a user regenerates per day 
//Raising this value will generally increase the current 
// mp for most posters. 
//This may be set to a decimal value (eg, 3, 3.5, 2.71828) 
//This should NOT be set to 0 
$level_mp_regen_per_day = 4; 

if($level_level < 1) 
{ 
   $level_mp = "0 / 0"; 
   $level_mp_percent = 100; 
} 
else 
{ 
   $level_max_mp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (pi()) ); 
    
   $level_mp_cost = $profiledata['user_posts'] * $level_post_mp_cost; 
    
   $level_mp_regen = max(1, $level_user_days * $level_mp_regen_per_day); 
    
   $level_cur_mp = floor($level_max_mp - $level_mp_cost + $level_mp_regen); 
   $level_cur_mp = max(0, $level_cur_mp); 
   $level_cur_mp = min($level_max_mp, $level_cur_mp); 
    
   $level_mp = $level_cur_mp . " / " . $level_max_mp; 
    
   $level_mp_percent = floor($level_cur_mp / $level_max_mp * 100); 
} 


/* Determine EXP percentage 
* 
* Experience is determined by how far the user is away 
* from the next level. This is expressed as a percentage. 
* 
* Note, a user of level 0 has 100% experience. Making one post 
* will put them at level 1. Also, a user that is shown to have 100% 
* experience, will go up a level on their next post. 
* 
*/ 

if($level_level == 0) 
{ 
   $level_exp = "0 / 0"; 
   $level_exp_percent = 100; 
} 
else 
{ 
   $level_posts_for_next = floor( pow( 10, pow( $level_level, (1/3) ) ) ); 
   $level_posts_for_this = floor( pow( 10, pow( ($level_level - 1), (1/3) ) ) ); 

   $level_exp = $profiledata['user_posts'] . " / " . $level_posts_for_next; 
   $level_exp_percent = floor( ($profiledata['user_posts'] - $level_posts_for_this) / 
                        max(1,($level_posts_for_next - $level_posts_for_this)) * 100); 
} 

/* END LEVEL HACK */ 

# 
#-----[ TROUVER ]------------------------------------------ 
# 

'U_SEARCH_USER' => append_sid("search.$phpEx?search_author=" . urlencode($profiledata['username'])), 
# 
#-----[ AJOUTER APRES ]------------------------------------------ 
# 
/* BEGIN LEVEL MOD */ 
         "HP" => $level_hp, 
         "HP_WIDTH" => $level_hp_percent, 
         "HP_EMPTY" => ( 100 - $level_hp_percent ), 
         "MP" => $level_mp, 
         "MP_WIDTH" => $level_mp_percent, 
         "MP_EMPTY" => ( 100 - $level_mp_percent ), 
         "EXP" => $level_exp, 
         "EXP_WIDTH" => $level_exp_percent, 
         "EXP_EMPTY" => ( 100 - $level_exp_percent ), 
         "LEVEL" => $level_level, 
         /* END LEVEL MOD */ 
# 
#-----[ OUVRIR ]------------------------------------------ 
# 

./templates/subSilver/profile_view_body.tpl 

# 
#-----[ TROUVER ]------------------------------------------ 
# 

<tr> 
<td valign="top" align="right" nowrap="nowrap"><span class="gen">{L_INTERESTS}:</span></td> 
<td> <b><span class="gen">{INTERESTS}</span></b></td> 
</tr> 
# 
#-----[ AJOUTER APRES ]------------------------------------------ 
# 
<!-- [BEGIN LEVEL MOD] --> 
<tr> 
<td valign="top" align="right"><span class="gen">Level:</span></td> 
<td><b><span class="gen">{LEVEL}</span></b></td> 
</tr> 
<tr> 
<td> </td> 
<td align="left"> 
<table cellspacing="0" cellpadding="0" border="0"> 
<tr> 
<td align="left"><span class="postdetails">HP:</span></td> 
<td align="right"><span class="postdetails"><b>{HP}</b></span></td> 
<td> </td> 
</tr> 
<tr> 
<td colspan="2"> 
<table cellspacing="0" cellpadding="0" border="0"> 
<tr> 
<td><img src="templates/subSilver/images/level_mod/hp_bar_left.gif" width="2" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/hp_bar_fil.gif" width="{HP_WIDTH}" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/hp_bar_fil_end.gif" width="1" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{HP_EMPTY}" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td> 
</tr> 
</table> 
</td> 
<td align="left"><span class="gen"> {HP_WIDTH}%</span></td> 
</tr> 
</table> 
</td> 
</tr> 

<tr> 
<td> </td> 
<td align="left"> 
<table cellspacing="0" cellpadding="0" border="0"> 
<tr> 
<td align="left"><span class="postdetails">MP:</span></td> 
<td align="right"><span class="postdetails"><b>{MP}</b></span></td> 
<td> </td> 
</tr> 
<tr> 
<td colspan="2"> 
<table cellspacing="0" cellpadding="0" border="0"> 
<tr> 
<td><img src="templates/subSilver/images/level_mod/mp_bar_left.gif" width="2" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/mp_bar_fil.gif" width="{MP_WIDTH}" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/mp_bar_fil_end.gif" width="1" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{MP_EMPTY}" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td> 
</tr> 
</table> 
</td> 
<td align="left"><span class="gen"> {MP_WIDTH}%</span></td> 
</tr> 
</table> 
</td> 
</tr> 

<tr> 
<td> </td> 
<td align="left"> 
<table cellspacing="0" cellpadding="0" border="0"> 
<tr> 
<td align="left"><span class="postdetails">EXP:</span></td> 
<td align="right"><span class="postdetails"><b>{EXP}</b></span></td> 
<td> </td> 
</tr> 
<tr> 
<td colspan="2"> 
<table cellspacing="0" cellpadding="0" border="0"> 
<tr> 
<td><img src="templates/subSilver/images/level_mod/exp_bar_left.gif" width="2" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/exp_bar_fil.gif" width="{EXP_WIDTH}" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/exp_bar_fil_end.gif" width="1" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/level_bar_emp.gif" width="{EXP_EMPTY}" height="12" /></td> 
<td><img src="templates/subSilver/images/level_mod/level_bar_right.gif" width="1" height="12" /></td> 
</tr> 
</table> 
</td> 
<td align="left"><span class="gen"> {EXP_WIDTH}%</span></td> 
</tr> 
</table> 
</td> 
</tr> 
<!-- [END LEVEL MOD] --> 
# 
#-----[ OUVRIR ]------------------------------------------ 
# 

./viewtopic.php 

# 
#-----[ CHERCHER ]------------------------------------------ 
# 

$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2']; 

# 
#-----[ AJOUTER APRES ]------------------------------------------ 
# 
/* BEGIN LEVEL HACK 
* Note: all new variables are prefixed with level_ to 
* be sure of not overwriting other variables. 
*/ 

/* Determine Level 
* 
* A users level is determined by their total number of posts. 
* We use a nice mathmatical formula to translate a post count 
* into a level. 
* Note, a user with zero posts is level 0 
* 
*/ 

if($postrow[$i]['user_posts'] < 1) 
{ 
   $level_level = 0; 
} 
else 
{ 
   $level_level = floor( pow( log10( $postrow[$i]['user_posts'] ), 3 ) ) + 1; 
} 

/* Determine HP 
* 
* HP is based on user activity. 
* Max HP is based on the users level, and will be the same for 
* all users of the same level. 
* 
* Current HP is based on the users posts per day. 
* The higher the users posts per day (ppd), the more hp 
* they will have. A user with average ppd (as set below) 
* will have 50% of their hp. As a user goes over the average 
* ppd, they will have more hp, but the gains will lessen 
* as the users ppd goes up. This makes it difficult, but not 
* impossible to have 100% hp. 
* 
* For users with under the average ppd, they will have 
* hp equal to 1/2 the percentage their ppd is of average. 
* ie- a user with 2.5 ppd, and an average ppd of 5 
* will have 25% hp. 
* 
* Users who miraculously manage to get higher than 100% 
* of their max health. (by posting far more than average) 
* will get a bonus to their max hp. 
* 
* Note that a user with a level of zero, has 0 / 0 hp. 
* 
*/ 

/* 
* This value determines what the 'average' posts per day is 
* Users above this value will have more hp, and users below 
* will have less. A user with exactly this posts per day 
* will have 50% of his max hp. 
* 
* This variable should NOT be zero. 
* You may set this to a decimal amount (eg 5.1, 2.35) 
*/ 
   $level_avg_ppd = 5; 

/* 
* this value sets how hard it is to achieve 100% 
* hp. The higher you set it, the harder it is to 
* get full hp. 
* 
* to judge how high to set it, a user must have 
* posts per day equal to the $level_avg_ppd plus 
* the number set below. 
* 
* This should NOT be zero. 
*/ 
   $level_bonus_redux = 5; 

/* 
* We need to calculate the user's 
* posts per day because it's not done for us, 
* unlike in profile.php 
*/ 
   $level_user_ppd = ($postrow[$i]['user_posts'] / max(1, round( ( time() - $postrow[$i]['user_regdate'] ) / 86400 ))); 

if($level_level < 1) 
{ 
   $level_hp = "0 / 0"; 
   $level_hp_percent = 0; 
} 
else 
{ 
   $level_max_hp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (1.5) ); 
    
   if($posts_per_day >= $level_avg_ppd) 
   { 
      $level_hp_percent = floor( (.5 + (($level_user_ppd - $level_avg_ppd) / ($level_bonus_redux * 2)) ) * 100); 
   } 
   else 
   { 
      $level_hp_percent = floor( $level_user_ppd / ($level_avg_ppd / 50) ); 
   } 
    
   if($level_hp_percent > 100) 
   { 
      //Give the User bonus max HP if they have more than 100% hp 
      $level_max_hp += floor( ($level_hp_percent - 100) * pi() ); 
      $level_hp_percent = 100; 
   } 
   else 
   { 
      $level_hp_percent = max(0, $level_hp_percent); 
   } 
    
   $level_cur_hp = floor($level_max_hp * ($level_hp_percent / 100) ); 
    
   //Be sure that a user has no more than max 
   //and no less than zero hp. 
   $level_cur_hp = max(0, $level_cur_hp); 
   $level_cur_hp = min($level_max_hp, $level_cur_hp); 
    
   $level_hp = $level_cur_hp . " / " . $level_max_hp; 
} 


/* Determine MP 
* 
* MP is calculated by how long the user has been around 
* and how often they post. 
* 
* Max MP is based on level, and increases with level 
* Each post a user makes costs them mp, 
* and a user regenerates mp proportional to how 
* many days they have been registered 
* 
*/ 

//Number of days the user has been at the forums. 
$level_user_days = max(1, round( ( time() - $postrow[$i]['user_regdate'] ) / 86400 )); 

//The mp cost for one post. 
//Raising this value will generally decrease the current 
// mp for most posters. 
//This may be set to a decimal value (eg, 2, 2.1, 3.141596) 
//This should NOT be set to 0 
$level_post_mp_cost = 1; 

//This determines how much mp a user regenerates per day 
//Raising this value will generally increase the current 
// mp for most posters. 
//This may be set to a decimal value (eg, 3, 3.5, 2.71828) 
//This should NOT be set to 0 
$level_mp_regen_per_day = 4; 

if($level_level < 1) 
{ 
   $level_mp = "0 / 0"; 
   $level_mp_percent = 100; 
} 
else 
{ 
   $level_max_mp = floor( (pow( $level_level, (1/4) ) ) * (pow( 10, pow( $level_level+2, (1/3) ) ) ) / (pi()) ); 
    
   $level_mp_cost = $postrow[$i]['user_posts'] * $level_post_mp_cost; 
    
   $level_mp_regen = max(1, $level_user_days * $level_mp_regen_per_day); 
    
   $level_cur_mp = floor($level_max_mp - $level_mp_cost + $level_mp_regen); 
   $level_cur_mp = max(0, $level_cur_mp); 
   $level_cur_mp = min($level_max_mp, $level_cur_mp); 
    
   $level_mp = $level_cur_mp . " / " . $level_max_mp; 
    
   $level_mp_percent = floor($level_cur_mp / $level_max_mp * 100); 
} 


/* Determine EXP percentage 
* 
* Experience is determined by how far the user is away 
* from the next level. This is expressed as a percentage. 
* 
* Note, a user of level 0 has 100% experience. Making one post 
* will put them at level 1. Also, a user that is shown to have 100% 
* experience, will go up a level on their next post. 
* 
*/ 

if($level_level == 0) 
{ 
   $level_exp = "0 / 0"; 
   $level_exp_percent = 100; 
} 
else 
{ 
   $level_posts_for_next = floor( pow( 10, pow( $level_level, (1/3) ) ) ); 

   $level_exp = $postrow[$i]['user_posts'] . " / " . $level_posts_for_next; 
   $level_exp_percent = floor( ($postrow[$i]['user_posts'] - $level_posts_for_this) / 
                        max(1,($level_posts_for_next - $level_posts_for_this)) * 100);    
} 

/* END LEVEL HACK */ 

#-----[ TROUVER ]------------------------------------------ 
# 

'POSTER_AVATAR' => $poster_avatar, 

# 
#-----[ AJOUTER APRES ]------------------------------------------ 
# 
/* BEGIN LEVEL MOD */ 
      "POSTER_HP" => $level_hp, 
      "POSTER_HP_WIDTH" => $level_hp_percent, 
      "POSTER_HP_EMPTY" => ( 100 - $level_hp_percent ), 
      "POSTER_MP" => $level_mp, 
      "POSTER_MP_WIDTH" => $level_mp_percent, 
      "POSTER_MP_EMPTY" => ( 100 - $level_mp_percent ), 
      "POSTER_EXP" => $level_exp, 
      "POSTER_EXP_WIDTH" => $level_exp_percent, 
      "POSTER_EXP_EMPTY" => ( 100 - $level_exp_percent ), 
      "POSTER_LEVEL" => $level_level, 
      /* END LEVEL MOD */ 
# 
#-----[ OUVRIR ]------------------------------------------ 
# 

./templates/subSilver/viewtopic_body.tpl 

# 
#-----[ TROUVER ]------------------------------------------ 
# 

</span><br /><span class="postdetails">{postrow.POSTER_RANK}<br />{postrow.RANK_IMAGE}{postrow.POSTER_AVATAR}<br /><br />{postrow.POSTER_JOINED}<br />{postrow.POSTER_POSTS}<br />{postrow.POSTER_FROM} 

# 
#-----[ AJOUTER APRES ]------------------------------------------ 
# 
<!-- [BEGIN LEVEL MOD] --> 
<br />    
<span class="postdetails"> 
     Niveau: <b>{postrow.POSTER_LEVEL}</b> 
<br />   <br />  
<table width="142" border="0" cellpadding="0" cellspacing="0" background="templates/subSilver/images/level_mod/corps.gif" height="49"> 
  <tr> 
    <td width="31" rowspan="2">&nbsp;</td> 
    <td width="109" valign="top"> 
      <table width="111" border="0" cellpadding="0" cellspacing="0"> 
        <tr> 
          <td valign="top" align="left"><img src="templates/subSilver/images/level_mod/01.gif" width="1" height="4"></td> 
        </tr> 
        <tr> 
          <td><img src="templates/subSilver/images/level_mod/barreV.gif" width="{postrow.POSTER_HP_WIDTH}" height="10" alt="{postrow.POSTER_HP}" name="barreHP"><img src="templates/subSilver/images/level_mod/rondV.gif" width="4" height="10"></td> 
        </tr> 
        <tr> 
          <td><img src="templates/subSilver/images/level_mod/02.gif" width="1" height="3"></td> 
        </tr> 
        <tr> 
          <td><img src="templates/subSilver/images/level_mod/barreB.gif" width="{postrow.POSTER_MP_WIDTH}" height="10" alt="{postrow.POSTER_MP}" name="barreMP"><img src="templates/subSilver/images/level_mod/rondB.gif" width="4" height="10"></td> 
        </tr> 
        <tr> 
          <td><img src="templates/subSilver/images/level_mod/03.gif" width="1" height="3"></td> 
        </tr> 
        <tr> 
          <td><img src="templates/subSilver/images/level_mod/barreR.gif" width="{postrow.POSTER_EXP_WIDTH}" height="10" alt="{postrow.POSTER_EXP}" name="barreEXP"><img src="templates/subSilver/images/level_mod/rondR.gif" width="4" height="10"></td> 
        </tr> 
        <tr> 
          <td height="5"></td> 
        </tr> 
      </table> 
    </td> 
  <td width="3"></td> 
  </tr> 
  <tr> 
    <td></td> 
    <td></td> 
  </tr> 
</table> 
<p></p> 
<p></p> 

<!-- [END LEVEL MOD] -->
# 
#-----[ SAUVER ET FERMER ]------------------------------------------ 
# 
# EoM 